package com.edu.chat.web.common.model;


import com.edu.chat.web.common.enums.ResultCodeEnum;
import lombok.Getter;

/**
 * 业务异常基类（非受检异常）
 * 推荐在业务层主动抛出，由全局异常处理器统一处理
 */
@Getter
public class BizException extends RuntimeException {
	// 建议添加序列化版本UID（根据项目规范）
	private static final long serialVersionUID = 1L;
	/**
	 * 错误码枚举值
	 */
	private final ResultCodeEnum resultCode;

	/**
	 * 补充错误详细信息（可选）
	 */
	private final String detailMsg;

	// ----------------- 构造方法 -----------------

	/**
	 * 基础构造方法
	 * @param resultCode 错误码枚举
	 */
	public BizException(ResultCodeEnum resultCode) {
		super(resultCode.getMsg());
		this.resultCode = resultCode;
		this.detailMsg = null;
	}

	/**
	 * 带详细描述的构造方法
	 * @param resultCode 错误码枚举
	 * @param detailMsg  补充错误信息（会追加到默认消息后）
	 */
	public BizException(ResultCodeEnum resultCode, String detailMsg) {
		super(resultCode.getMsg() + " : " + detailMsg);
		this.resultCode = resultCode;
		this.detailMsg = detailMsg;
	}

	/**
	 * 包含原始异常的构造方法
	 * @param resultCode 错误码枚举
	 * @param cause      原始异常对象
	 */
	public BizException(ResultCodeEnum resultCode, Throwable cause) {
		super(resultCode.getMsg(), cause);
		this.resultCode = resultCode;
		this.detailMsg = null;
	}


	@Override
	public String getMessage() {
		return detailMsg != null ?
				super.getMessage() + " (" + detailMsg + ")" :
				super.getMessage();
	}
}
